import numpy as np

# 1. 切片
# 切片只提供了一个视图。

print("切片：")

a = np.arange(10)
s = slice(2, 7, 2)
print(a[s])  # [2, 4, 6]
print()

# 将切片赋值给ndarray对象
b = a[s]
print(b)  # [2, 4, 6]
print()


# 二维数组切片

a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print(a)
print("从索引a[1:]对数组进行切片：")
print(a[1:])  # 第 2 行及其之后的所有元素
print()

# 2. NumPy高级索引
# 高级索引始终返回数据的副本。

print("索引：")

# 整数索引
"""
基于N维索引来获取数组中的任意元素。
每个整数数组表示该维度的下标值。
当索引的元素个数就是目标ndarray的维度时，会变得相当直接。
"""

a = np.array([[1, 2], [3, 4], [5, 6]])

# 行索引包含所有行号，列索引指定要选择的元素
b = a[[0, 1, 2], [0, 1, 0]]  # 对(0, 0)(1, 1)(2, 0)进行切片
print(a)
print()
print(b)
print()


# 取出4×3数组中的每个角处的元素
# 行索引是[0,0]和[3,3]，而列索引是[0,2]和[0,2]
m = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
print("原array：")
print(m)
print()
print("array角元素：")
rows = np.array([[0, 0], [3, 3]])
cols = np.array([[0, 2], [0, 2]])
r = m[rows, cols]
print(r)
print()


# 布尔值索引
# 当结果对象是布尔运算（例如比较运算符）的结果时，将使用此类型的高级索引


# 大于5的元素会作为布尔索引的结果返回
m = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
print("原array：")
print(m)
print()
print("大于5的元素是：")
print(m[m > 5])
